load(":current_toolchain_files_test.bzl", "current_toolchain_files_test")

exports_files([
    "current_toolchain_files_test.sh",
])

# Executable targets will output a pattern similar to the following
# cargo 1.53.0 (4369396ce 2021-04-27)
# Also Note, rustc_srcs is too big for this test
_FILES = {
    "cargo": ("executable", r"^cargo [0-9\.]\+\(-nightly\)\? ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "clippy": ("executable", r"^clippy [0-9\.]\+ ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rust_stdlib": ("files", r"\.rlib"),
    "rustc": ("executable", r"^rustc [0-9\.]\+\(-nightly\)\? ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rustc_lib": ("files", r"rustc_driver"),
    "rustdoc": ("executable", r"^rustdoc [0-9\.]\+\(\-nightly\)\? ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
    "rustfmt": ("executable", r"^rustfmt [0-9\.]\+\-\(stable\|nightly\) ([0-9a-z]\+ [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})"),
}

# Test that all toolchain tools consumable (executables are executable and filegroups contain expected sources)
[
    current_toolchain_files_test(
        name = tool + "_test",
        kind = kind,
        pattern = pattern,
        # TOOO: Windows requires use of bash which is not guaranteed to be available.
        # The test runner should ideally be rewritten in rust so that windows could
        # be tested.
        target_compatible_with = select({
            "@platforms//os:windows": ["@platforms//:incompatible"],
            "//conditions:default": [],
        }),
        tool = "//rust/toolchain:current_{}_files".format(tool),
    )
    for tool, (kind, pattern) in _FILES.items()
]
